home *** CD-ROM | disk | FTP | other *** search
- /* d2d (simple frontend for _date2day_)
- (c) Armin.Obersteiner@giga.or.at
-
- input: <day>.<month>.<year>
- output: Monday-Sunday, Error
- */
-
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <math.h>
-
- char *d[7]=
- {
- "Monday",
- "Tuesday",
- "Wednesday",
- "Thursday",
- "Friday",
- "Saturday",
- "Sunday"
- };
-
- char prg[256];
-
- int date2day(int day,int month,int year);
- int sjahr(int year);
-
- void main(int argc, char *argv[])
- {
- int day,month,year;
- char da[10],mo[10],ye[20];
-
- if(argc!=2)
- {
- printf("USAGE: %s <day>.<month>.<year>\n",argv[0]);
- printf(" example: %s 27.3.1995\n",argv[0]);
- printf(" first usable date: 1.1.1801\n");
- }
- else
- {
- int h;
-
- strcpy(prg,argv[0]);
-
- strcpy(da,strtok(argv[1],"."));
- strcpy(mo,strtok(NULL,"."));
- strcpy(ye,strtok(NULL," \0\n"));
-
- day=atoi(da);
- month=atoi(mo);
- year=atoi(ye);
-
- h=date2day(day,month,year);
-
- if(h)
- {
- printf("%s\n",d[h-1]);
- }
- else
- {
- printf("Date NOT valid !!\n");
- }
- }
- }
-
- /* date2day
- (c) Armin.Obersteiner@giga.or.at
-
- input: <int> day,month,year
- output:<int> 0,1-7
-
- 0: error (before 1.1.1801 - this should be enough
- if somebody knows a "day" before that please mail it to me)
-
- 1-7: Monday-Sunday
- */
-
- int date2day(int day,int month,int year)
- {
- int md[12]={31,28,31,30,31,30,31,31,30,31,30,31};
-
- int j,i=0;
- int jahr=0;
- int s;
-
- if(year<1801) return 0;
- if( (month<1) || (month>12) ) return 0;
- if(day<1) return 0;
-
- s=sjahr(year);
-
- if( (day>md[month-1]) )
- {
- if(!s) return 0;
- if( (s) && (month=2) && (day>29) ) return 0;
- }
-
- for(j=1801;j<year;j++) if(sjahr(j)) i++;
-
- jahr=(year-1801)*365+i+day;
-
- for(i=1;i<month;i++) jahr=jahr+md[i-1];
- if(s && (month>2)) jahr=jahr+1;
-
- switch((int)fmod((double)jahr,(double)7))
- {
- case 0: return 4; /* 1.1.1801 is a Thursday ->4 */
- break;
- case 1: return 5;
- break;
- case 2: return 6;
- break;
- case 3: return 7;
- break;
- case 4: return 1;
- break;
- case 5: return 2;
- break;
- case 6: return 3;
- break;
- }
- }
-
- /* sjahr
- (c) Armin.Obersteiner@giga.or.at
-
- input: <int> year
- output: <int> 0,1
-
- 0: normal year
- 1: leap-year
- */
-
- int sjahr(int year)
- {
- int schalt=0;
-
- if(fmod((double)year,(double)4)==0) schalt=1;
- if(fmod((double)year,(double)100)==0) if(fmod((double)year,(double)400)!=0) schalt=0;
-
- return schalt;
- }
-
-